#!/bin/bash
# **********************************************************
# * Author : liangliangSu
# * Email : sll917@hotmail.com
# * Create time : 2023-02-04 16:01
# * Filename : 01for循环.sh
# **********************************************************
: '
与其他编程语言类似，Shell 支持 for 循环。
for 循环一般格式为：
for 变量 in 列表
do
command1
command2
...
commandN
done
列表是一组值（数字、字符串等）组成的序列，每个值通过空格分隔。每循环一次，就将列表中的下一个值赋给
变量。
in 列表是可选的，如果不用它，for 循环使用命令行的位置参数。
'
echo '(1) -------------------------------------------------'
#例如，顺序输出当前列表中的数字：
for loop in 1 2 3 4 5; do
	echo "The value is: $loop"
done

echo '(2) -------------------------------------------------'
for var in {1..10};do echo $var;done
echo '(3) -------------------------------------------------'
for var in 1 2 3 4 5;do echo $var;done
echo '(4) -------------------------------------------------'
for var in $(seq 10);do echo $var;done
echo '(5) -------------------------------------------------'
for var in {0..10..2};do echo $var;done

echo '(6) -------------------------------------------------'
#顺序输出字符串中的字符：
for str in 'This is a string'; do
	echo $str
done

echo '(7) -------------------------------------------------'
#显示主目录下以 .bash 开头的文件：
for FILE in $HOME/.bash*; do
	echo $FILE
done

: '
类C风格的for循环
for(( expr1;expr2;expr3 ))
	do
		command
		command
		…
	done
expr1：定义变量并赋初值
expr2：决定是否进行循环（条件）
expr3：决定循环变量如何改变，决定循环什么时候退出
'
# 计算1到100的奇数之和，方法不止一种
# 思路：
# 1. 定义一个变量来保存奇数的和	sum=0
# 2. 找出1-100的奇数，保存到另一个变量里  i
# 3. 从1-100中找出奇数后，再相加，然后将和赋值给sum变量
# 4. 遍历完毕后，将sum的值打印出来

echo '(8-1) -------------------------------------------------'
# 方法1：
sum=0
for i in {1..100..2}
do
	sum=$[$i+$sum]
done
echo "1-100的奇数和为:$sum"

echo '(8-2) -------------------------------------------------'

# 方法2：
sum=0
for ((i=1;i<=100;i+=2))
do
	let sum=$i+$sum
done
echo "1-100的奇数和为:$sum"

echo '(8-3) -------------------------------------------------'
# 方法3：
sum=0
for ((i=1;i<=100;i++))
do
	if [ $[$i%2] -ne 0 ];then
	let sum=$sum+$i
	fi
done
echo "1-100的奇数和为:$sum"

echo '(8-4) -------------------------------------------------'
# 方法4：
sum=0
for ((i=1;i<=100;i++))
do
	if [ $[$i%2] -eq 0 ];then
	continue
	else
	let sum=$sum+$i
	fi
done
echo "1-100的奇数和为:$sum"

echo '(8-5) -------------------------------------------------'
# 方法5：
sum=0
for ((i=1;i<=100;i++))
do
	test $[$i%2] -eq 0 && continue || let sum=sum+$i
done
echo "1-100的奇数和是:$sum"

echo '(9) -------------------------------------------------'
sum=0
read -p '请输入一个1-100之间的整数：' a
for ((i = 1; i <= $a; i++)); do
	sum=$(($sum + $i))
done
echo "$sum"
#printf "\n"  #在每次循环换行

echo '(10) -------------------------------------------------'
n=0
for i in {1..100}; do
	n=$(expr $i + $n)
done
echo $n

echo '(11) -------------------------------------------------'
for ((counter = 1; counter <= 10; counter++)); do
	echo -n "$counter "
done
printf "\n"

: '
总结
FOR循环语法结构
FOR循环可以结合条件判断和流程控制语句
do …done 循环体
循环体里可以是命令集合，再加上条件判断以及流程控制
控制循环语句
continue 继续，跳过本次循环，继续下一次循环
break 打断，跳出循环，执行循环体外的代码
exit 退出，直接退出程序
'
